<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 交换位置的方法
      const swap = (array, a, b) => {
        const temp = array[a];
        array[a] = array[b];
        array[b] = temp;
      };

      function bubbleSort(array) {
        const { length } = array;
        for (let i = 0; i < length; i++) {
          // 双重for循环  算法的执行逻辑是 (第一个for循环) 拿第一个数 和 (第二次循环) 每个数进行比较
          // 第二个for循环的终止条件是 j < length -1  (为了保证最好的性能 length - 1 -i 因为最末尾已经是最大值 不需要再遍历)
          // 原因: 下面比较的是arr[j] 和 arr[j+1] 所以 第length-1项 就是最后一项
          // 条件也可以改成 i+1
          for (let j = 0; j < length - 1 - i; j++) {
            if (array[j] > array[j + 1]) {
              swap(array, j, j + 1);
            }
          }
        }
        console.log(array);
      }

      bubbleSort([1, 3, 43, 2, 34, 56]);
    </script>
  </body>
</html>
